from fastapi import APIRouter, Depends, HTTPException
from starlette.responses import JSONResponse
from .sovits_schema import MdxnetSchema
from .send_http import mdxnet_post
import asyncio

# 创建API路由实例
router = APIRouter(
    prefix="/sovits",
    tags=["GPT-SoVITS"],
    responses={404: {"description": "Not found"}},
)
# 定义全局异步锁，用于控制并发请求
lock = asyncio.Lock()


@router.post("/mdxnet", tags=['人声伴奏分离'])
async def mdxnet(get_json: MdxnetSchema):
    """
    该函数是一个异步处理函数，用于处理发送到"/sovits/mdxnet"的POST请求。

    - 接收并打印解析后的JSON数据（get_json）
    - 使用asyncio.Lock进行同步控制，确保同一时间只有一个请求在处理
    - 调用mdxnet_post函数处理请求，获取状态码（state）和数据（data）
    """
    print(get_json)
    # 使用异步上下文管理器确保在处理请求期间持有锁
    async with lock:
        state, data = await mdxnet_post(get_json)
        print(state, data)
        return JSONResponse(status_code=state, content=data)
